package com.divemotor.ventarepuestosinternet.beans.lazy;

import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;

import com.divemotor.ventarepuestosinternet.exception.DivemotorBusinessException;
import com.divemotor.ventarepuestosinternet.model.Imagen;
import com.divemotor.ventarepuestosinternet.model.Repuesto;
import com.divemotor.ventarepuestosinternet.service.RepuestoService;

public class RepuestoImagenLazy extends LazyDataModel<Repuesto> {

	private static final long serialVersionUID = 1L;
	public static final Logger LOGGER = Logger.getLogger(RepuestoImagenLazy.class);
	
    List<Repuesto> listaRepuestosBusqueda;
	RepuestoService repuestoService;
	Repuesto repuestoFiltro;
	Imagen imagenSeleccionada;
	Integer nroRegistros;
	
	public RepuestoImagenLazy(RepuestoService repuestoService, Repuesto repuestoFiltro, Imagen imagenSeleccionada){
		this.repuestoService = repuestoService;
		this.repuestoFiltro = repuestoFiltro;
		this.imagenSeleccionada = imagenSeleccionada;
	}
	    
    
    @Override
	public List<Repuesto> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
    	try {
	    	listaRepuestosBusqueda = repuestoService.buscarRepuestosAsignablesPorImagen(first, pageSize, sortOrder, sortField, repuestoFiltro, imagenSeleccionada);
	    	nroRegistros = repuestoService.obtenerNumeroRepuestosAsignablesPorImagen(repuestoFiltro, imagenSeleccionada);
	    	setRowCount(nroRegistros);
			return listaRepuestosBusqueda;
			
    	} catch (DivemotorBusinessException e) {
    		LOGGER.error("EX* load DivemotorBusinessException: " + e.getMessage());
			return null;
		} catch (Exception e) {
			LOGGER.error("EX* load Exception: " + e.getMessage());
			return null;
		}
	}

    
    @Override
	public Object getRowKey(Repuesto repuesto) {
		return repuesto.getIdRepuesto();
	}

	@Override
	public Repuesto getRowData(String repuestoId) {
		Integer id = Integer.valueOf(repuestoId);
		for (Repuesto repuesto : listaRepuestosBusqueda) {
			if (id.equals(repuesto.getIdRepuesto())) {
				return repuesto;
			}
		}
		return null;
	}
    
	@Override
	public void setRowIndex( int rowIndex ){
	   if ( rowIndex == -1 || getPageSize() == 0 ){
		   super.setRowIndex( -1 );
	   }else{
		   super.setRowIndex( rowIndex % getPageSize() );
	   }
	}

	public List<Repuesto> getListaRepuestosBusqueda() {
		return listaRepuestosBusqueda;
	}

	public void setListaRepuestosBusqueda(List<Repuesto> listaRepuestosBusqueda) {
		this.listaRepuestosBusqueda = listaRepuestosBusqueda;
	}


	public Integer getNroRegistros() {
		return nroRegistros;
	}


	public void setNroRegistros(Integer nroRegistros) {
		this.nroRegistros = nroRegistros;
	}
	
}
